package hot.hash;

import java.util.*;

public class A49 {
    public List<List<String>> groupAnagrams1(String[] strs) {
        List<List<String>> res=new ArrayList<>();
    //如果可以放在一起，他们排序后相同
        Map<String,List<String>> map=new HashMap<>();
        for (String str : strs) {
            char[] charArray = str.toCharArray();
            Arrays.sort(charArray);
            String s =new String(charArray);
            //获取同类字符串集合
            List<String> strings = map.getOrDefault(s,new ArrayList<>());
            strings.add(str);
            map.put(s,strings);
        }
      return new ArrayList<>(map.values());
    }
    public List<List<String>> groupAnagrams(String[] strs) {
        List<List<String>> res=new ArrayList<>();
        //可以采用排序后的字母作为键，
        //也可以通过字母＋次数
        //比如 abcc => a1b1c2作为key
        Map<String,List<String>> map=new HashMap<>();
        for (String str : strs) {
        char[] ch=new char[26];
            int length = str.length();
            for(int i=0;i<length;i++){
                ch[str.charAt(i)-'a']++;
            }
            StringBuilder sb=new StringBuilder();
          for(int i=0;i<26;i++){
              if(ch[i]>0){
                  sb.append((char)('a'+i)); //i代表当前字母与a的偏移量
                  sb.append(ch[i]);
              }
          }
            String string = sb.toString();
            List<String> st= map.getOrDefault(string, new ArrayList<>());
            st.add(str);
            map.put(string,st);
        }
        return new ArrayList<>(map.values());
    }
}
